package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import modelo.Juego;

import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.ImageIcon;

import java.awt.Color;
import java.text.DecimalFormat;

import javax.swing.UIManager;


public class MenuCiudad extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private Juego juego;
	JLabel lblTiempoRestante;
	JLabel lblImagenCiudad;
	JLabel lblNombreCiudad;
	JLabel lblDescripcionCiudad;
	JLabel lblPolicia;
	JLabel lblArrestos;

	
	public MenuCiudad(Juego juego) {
		setResizable(false);
		
		this.juego=juego;
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 345);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(null);
		setContentPane(contentPane);
		
		this.CargarLabels();
		
		JButton btnViajar = new JButton("Viajar");
		btnViajar.setBounds(57, 54, 89, 23);
		getContentPane().add(btnViajar);
		
		btnViajar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				MenuCiudad.this.clickBtnViajar();
			}
		});
		
		JButton btnEdificios = new JButton("Edificios");
		btnEdificios.setBounds(158, 54, 89, 23);
		getContentPane().add(btnEdificios);
		
		btnEdificios.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				MenuCiudad.this.clickBtnEdificios();
			}
		});
		
		JButton btnOrdenArresto = new JButton("Orden de Arresto");
		btnOrdenArresto.setBounds(259, 54, 136, 23);
		getContentPane().add(btnOrdenArresto);
		btnOrdenArresto.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				MenuCiudad.this.clickBtnOrdenDeArresto();
			}
		});
		
		JLabel lblNewLabel = new JLabel("");
		lblNewLabel.setForeground(Color.DARK_GRAY);
		lblNewLabel.setBackground(Color.DARK_GRAY);
		String ruta = juego.getPolicia().getCiudadActual().getNombreDeCiudad().replace(" ", "");
		lblNewLabel.setIcon(new ImageIcon(MenuCiudad.class.getResource("/gui/imagess/" + ruta + ".png")));
		lblNewLabel.setBounds(222, 96, 200, 200);
		contentPane.add(lblNewLabel);
		lblImagenCiudad = lblNewLabel;
		
		
		JLabel lblNewLabel_1 = new JLabel(juego.getPolicia().getCiudadActual().getNombreDeCiudad());
		lblNewLabel_1.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblNewLabel_1.setBounds(23, 88, 177, 30);
		contentPane.add(lblNewLabel_1);
		lblNombreCiudad = lblNewLabel_1;
		
		JLabel lblArrestos = new JLabel("Arrestos: " + juego.getPolicia().getArrestosRealizados());
		lblArrestos.setBounds(345, 15, 89, 14);
		contentPane.add(lblArrestos);
		this.lblArrestos = lblArrestos;
		
		JPanel panel = new JPanel();
		panel.setBackground(new Color(0, 153, 204));
		panel.setBounds(0, 0, 444, 43);
		contentPane.add(panel);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBackground(UIManager.getColor("Button.shadow"));
		panel_1.setBounds(0, 43, 444, 43);
		contentPane.add(panel_1);
		
		JLabel lblNewLabel_2 = new JLabel("<html>" + juego.getPolicia().getCiudadActual().getDescripcion() + "</html>");
		lblNewLabel_2.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblNewLabel_2.setBounds(23, 118, 190, 178);
		contentPane.add(lblNewLabel_2);
		lblDescripcionCiudad = lblNewLabel_2;			
	}
	
	protected void clickBtnOrdenDeArresto() {
		JDialogOrdenDeArresto JDOrdenArresto = new JDialogOrdenDeArresto(this.juego);
		JDOrdenArresto.setModal(true);
		JDOrdenArresto.setVisible(true);
		this.actualizar();
	}

	protected void clickBtnEdificios() {
		JDialogEdificios JDEdificios = new JDialogEdificios(this.juego);
		JDEdificios.setModal(true);
		JDEdificios.setVisible(true);
		this.actualizar();
	}

	protected void actualizar() {
		Float tiempo = juego.getPolicia().getTiempoRestante();
		lblTiempoRestante.setText("Tiempo Restante: "+ new DecimalFormat("#.##").format(tiempo) + "hs");
		lblPolicia.setText(juego.getPolicia().getRango().toString() + ": " + juego.getPolicia().getNombre());
		lblArrestos.setText("Arrestos: " + juego.getPolicia().getArrestosRealizados());
		
		String ruta = juego.getPolicia().getCiudadActual().getNombreDeCiudad().replace(" ", "");
		lblImagenCiudad.setIcon(new ImageIcon(MenuCiudad.class.getResource("/gui/imagess/" + ruta + ".png")));
		lblNombreCiudad.setText(juego.getPolicia().getCiudadActual().getNombreDeCiudad());
		
		lblDescripcionCiudad.setText("<html>" + juego.getPolicia().getCiudadActual().getDescripcion() + "</html>");
		
		verificarFinDeJuego();
	}

	private void verificarFinDeJuego() {
		if(juego.haTerminado()){
			
			String mensaje;
			if(juego.haGanado()){
				mensaje = "<html>Victoria!<br/>";
				mensaje += "Atrapaste a " + juego.getLadron().getNombre() + ", que se escondia en " + juego.getPolicia().getCiudadActual().getNombreDeCiudad() + "<br/>";
				mensaje += "Recuperaste " + juego.getLadron().getObjetoRobadoString() + " que habia robado.</html>";
			}
			else{
				mensaje = "<html>Derrota!<br/>";
				mensaje += "No lograste atrapar al ladron: " + juego.getLadron().getNombre() + "<br/>";
				mensaje += "Escapo con " + juego.getLadron().getObjetoRobadoString() + " que habia robado.</html>";
			}
			
			JOptionPane.showMessageDialog(this, mensaje);
			
			int opcion=JOptionPane.showConfirmDialog(this, "Desea que se le asigne otro caso??");
			
			juego.guardarJugadorActualEnXml();
			if(opcion==JOptionPane.YES_OPTION){
				this.juego.inicializarMundo();
			}
			else{
				System.exit(0);
			}
			
			this.actualizar();
		}
	}

	private void clickBtnViajar(){
		jDialogViajaar JDviajar=new jDialogViajaar(juego);
		JDviajar.setModal(true);
		JDviajar.setVisible(true);
		this.actualizar();
	}
	
	private void CargarLabels(){
		
		JLabel lblPolicia = new JLabel(juego.getPolicia().getRango().toString() + ": " + juego.getPolicia().getNombre());
		lblPolicia.setBounds(23, 11, 123, 23);
		contentPane.add(lblPolicia);
		this.lblPolicia = lblPolicia;
		
		Float tiempo=juego.getPolicia().getTiempoRestante();
		lblTiempoRestante = new JLabel("Tiempo Restante: " + tiempo.toString() + "hs");
		lblTiempoRestante.setBounds(156, 15, 179, 14);
		contentPane.add(lblTiempoRestante);
	}
}
